In [1]:
import numpy as np
  • ndarray
    • numpy의 기본 자료구조로 vector와 matrix를 표현

In [2]:
array1 = np.array([1, 2, 3, 4])
array2 = np.array([[1, 2], [3, 4]])

print type(array1), '\n', array1
print type(array2), '\n', array2


<type 'numpy.ndarray'> 
[1 2 3 4]
<type 'numpy.ndarray'> 
[[1 2]
 [3 4]]
  • arange
    • range()와 동일하지만 list가 아닌 ndarray 반환

In [3]:
array3 = np.arange(1, 4)
print array3, type(array3)


[1 2 3] <type 'numpy.ndarray'>
  • linspace(start, end, n)
    • start, end를 n개의 균일한 간격으로 분할

In [4]:
# 0 ~ 10의 범위를 5등분
array4 = np.linspace(0, 10, 5)
print array4


[  0.    2.5   5.    7.5  10. ]

In [5]:
print np.zeros((3, 5))
print np.zeros(5)


[[ 0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.]]
[ 0.  0.  0.  0.  0.]

In [6]:
# (n1, n2, x, y): (x, y) 행렬(1) n2개 생성 후 그것을 다시 n1개 만큼 생성하여 반환(dimension 증가)
print np.ones((2, 3, 2, 3))
print np.ones(5)


[[[[ 1.  1.  1.]
   [ 1.  1.  1.]]

  [[ 1.  1.  1.]
   [ 1.  1.  1.]]

  [[ 1.  1.  1.]
   [ 1.  1.  1.]]]


 [[[ 1.  1.  1.]
   [ 1.  1.  1.]]

  [[ 1.  1.  1.]
   [ 1.  1.  1.]]

  [[ 1.  1.  1.]
   [ 1.  1.  1.]]]]
[ 1.  1.  1.  1.  1.]

In [7]:
# np.random.rand(n)
## Uniform Distribution으로부터 [0, 1) 실수 n개 출력
print np.random.rand(3)

# np.random.randn(n)
## Standard Normal Distribution으로부터 n개의 실수 출력
print np.random.randn(3)


[ 0.77767154  0.61339234  0.66991779]
[ 0.52741333  0.76161802  0.31063524]
  • (): 초과, 미만
  • []: 이상, 이하

In [8]:
a = np.random.rand()
print a


0.311078822994
  • seed(n): n에 따른 랜덤값 생성규칙 지정
    • 임의값을 계속 유지해야할 때 사용

In [9]:
np.random.seed(0)
print np.random.rand()

np.random.seed(7)
print np.random.rand()


0.548813503927
0.076308289374
  • slicing: 리스트, 문자열과 동일

In [10]:
array1 = np.array([1, 2, 3, 4])
array2 = np.array([[1, 2], [3, 4], [5, 6]])

In [11]:
print array1[0]
print array1[1:-1]


1
[2 3]

In [12]:
print array2


[[1 2]
 [3 4]
 [5 6]]

In [13]:
# 1행 출력
print array2[0]
# 1행 2열 출력
print array2[0, 1]
# 2행부터 끝까지, 1열부터 2열까지
print array2[1:, :2]
# 전체 행, 2열
print array2[:, 1]
# 전체 행, 2열부터(범위)
print array2[:, 1:]


[1 2]
2
[[3 4]
 [5 6]]
[2 4 6]
[[2]
 [4]
 [6]]
  • array masking
    • ndarray의 원소를 선택, 제거 또는 추출하는 방법

In [14]:
# np.random.randint(x, y, n): [x, y)의 정수 n개 반환
array = np.random.randint(0, 20, 10)
print array, type(array)


[ 3 19  7 14  8 14 10  8  7  6] <type 'numpy.ndarray'>

In [15]:
# 짝수 선별
even_mask = (array % 2 == 0)
print array[even_mask]
print array[array % 2 == 0]


[14  8 14 10  8  6]
[14  8 14 10  8  6]
  • operations
    • 기본 연산은 벡터화되어 전체 원소에 적용(element-wise)

In [16]:
array = np.arange(1, 6) * 5
print array


[ 5 10 15 20 25]

In [17]:
array2 = array ** 2
print array2
print array2 ** 0.5


[ 25 100 225 400 625]
[  5.  10.  15.  20.  25.]

In [18]:
array1 = np.arange(0, 20, 2) + 2
array2 = np.arange(1, 11)
print 'array1:', array1, 'array2:', array2
print '-'*100
print 'array1 - array2', array1 - array2
print 'array1 * array2', array1 * array2
print 'array1 * array1', array1 * array1


array1: [ 2  4  6  8 10 12 14 16 18 20] array2: [ 1  2  3  4  5  6  7  8  9 10]
----------------------------------------------------------------------------------------------------
array1 - array2 [ 1  2  3  4  5  6  7  8  9 10]
array1 * array2 [  2   8  18  32  50  72  98 128 162 200]
array1 * array1 [  4  16  36  64 100 144 196 256 324 400]

In [19]:
array1 = np.array([[1, 1], [1, 1]])
array2 = np.array([[2, 2], [2, 2]])

print array1 * array2  # 원소간 곱셈
print array1.dot(array2) # 행렬곱셈(내적)


[[2 2]
 [2 2]]
[[4 4]
 [4 4]]
  • logical operator
    • all(): 전부
    • any(): 아무거나

In [20]:
array = np.random.randint(1, 10, size = (4,4))
print array


[[5 1 8 1]
 [8 7 4 6]
 [9 9 8 6]
 [1 1 3 9]]

In [21]:
print np.all(array < 7)


False

In [22]:
print np.any(array % 7 == 0)


True
  • ravel: multi-dimensional array -> one-dimensional array

In [23]:
array = np.array([[1, 2, 3], [7, 8, 9]])
print array
print array.ravel()


[[1 2 3]
 [7 8 9]]
[1 2 3 7 8 9]
  • .reshape(x, y): x, y배열로 재배열

In [24]:
array = np.arange(1, 11)
print array

array2 = array.reshape(2, 5)
print array2


[ 1  2  3  4  5  6  7  8  9 10]
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]

In [25]:
# numpy methods for descriptive statistics
print array
print 'min:', np.min(array)    # 최소값
print 'mean:', np.mean(array)    # 평균
print 'median:', np.median(array)    # 중앙값
print 'max:', np.max(array)    # 최대값
print 'std:', np.std(array)    # 표준편차
print 'argmin:', np.argmin(array)    # 최소값 index 반환
print 'argmax:', np.argmax(array)    # 최대값 index 반환
print 'sum:', np.sum(array)    # 합계
print 'sqrt:', np.sqrt(array)    # 제곱근


[ 1  2  3  4  5  6  7  8  9 10]
min: 1
mean: 5.5
median: 5.5
max: 10
std: 2.87228132327
argmin: 0
argmax: 9
sum: 55
sqrt: [ 1.          1.41421356  1.73205081  2.          2.23606798  2.44948974
  2.64575131  2.82842712  3.          3.16227766]

In [26]:
#bit-wise XOR
a = 10
print 10 ^ 2
print 17 ^ 8


8
25